﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Talento21.Modelo;
using Talento21.Negocio.Servicio;

namespace Talento21.Pages.Empresa
{
    public class ViewModelUsuario : InfPersonas
    {
        public String Usuario { get; set; }

        public String Password { get; set; }

        public int? Estado { get; set; }

        public bool Activo {
            get {
                return Estado == 1;
            }
            set
            {
                Estado = value ? 1 : 0;
            }
        }

        

        private Negocio.Servicio.SrvUsuario srvUsuario = new Negocio.Servicio.SrvUsuario();


        public List<ViewModelUsuario> ObtenerPersona()
        {
            return new List<ViewModelUsuario>();
        }

        public List<ViewModelUsuario> ObtenerUsuarioPorNombre(string nombreUsuario)
        {
            var usuario = srvUsuario.ObtenerUsuario(nombreUsuario);

            ViewModelUsuario viewUsuario = new ViewModelUsuario();
            viewUsuario.Estado = usuario.Estado;
            viewUsuario.ApellidoMaterno = usuario.InfPersonas.ApellidoMaterno;
            viewUsuario.ApellidoPaterno = usuario.InfPersonas.ApellidoPaterno;
            viewUsuario.Complementario = usuario.InfPersonas.Complementario;
            viewUsuario.DireccionParticular = usuario.InfPersonas.DireccionParticular;
            viewUsuario.Dv = usuario.InfPersonas.Dv;
            viewUsuario.Emp_rut = usuario.InfPersonas.Emp_rut;
            viewUsuario.FonoCelular = usuario.InfPersonas.FonoCelular;
            viewUsuario.FonoDireccion = usuario.InfPersonas.FonoDireccion;
            viewUsuario.FonoEmpresa = usuario.InfPersonas.FonoEmpresa;
            viewUsuario.FonoParticular = usuario.InfPersonas.FonoParticular;
            viewUsuario.IdComuna = usuario.InfPersonas.IdComuna;
            viewUsuario.Mail = usuario.InfPersonas.Mail;
            viewUsuario.Nombre = usuario.InfPersonas.Nombre;
            viewUsuario.Rut = usuario.InfPersonas.Rut;
            viewUsuario.Usuario = usuario.Usuario;
            viewUsuario.Password = usuario.Password;

            return new List<ViewModelUsuario>() { viewUsuario };
        }

        public List<ViewModelUsuario> ObtenerTrabajadorPorRut(int rut)
        {
            InfUsuario usuario = srvUsuario.ObtenerUsuarioPorRut(rut);
            ViewModelUsuario viewUsuario = toViewModel(usuario);
            return new List<ViewModelUsuario>() { viewUsuario };
        }

        public List<ViewModelUsuario> ObtenerUsuarioPorRut(int rut)
        {
            var usuarios = srvUsuario.ObtenerUsuariosAdminPorRut(rut);

            var viewUsuarios =  new List<ViewModelUsuario>();

            foreach (var usuario in usuarios)
            {

                ViewModelUsuario viewUsuario = toViewModel(usuario);
                viewUsuarios.Add(viewUsuario);
            }


            return viewUsuarios;
        }

        private static ViewModelUsuario toViewModel(Modelo.InfUsuario usuario)
        {
            ViewModelUsuario viewUsuario = new ViewModelUsuario();
            viewUsuario.ApellidoMaterno = usuario.InfPersonas.ApellidoMaterno;
            viewUsuario.ApellidoPaterno = usuario.InfPersonas.ApellidoPaterno;
            viewUsuario.Complementario = usuario.InfPersonas.Complementario;
            viewUsuario.DireccionParticular = usuario.InfPersonas.DireccionParticular;
            viewUsuario.Dv = usuario.InfPersonas.Dv;
            viewUsuario.Emp_rut = usuario.InfPersonas.Emp_rut;
            viewUsuario.FonoCelular = usuario.InfPersonas.FonoCelular;
            viewUsuario.FonoDireccion = usuario.InfPersonas.FonoDireccion;
            viewUsuario.FonoEmpresa = usuario.InfPersonas.FonoEmpresa;
            viewUsuario.FonoParticular = usuario.InfPersonas.FonoParticular;
            viewUsuario.IdComuna = usuario.InfPersonas.IdComuna;
            viewUsuario.Mail = usuario.InfPersonas.Mail;
            viewUsuario.Nombre = usuario.InfPersonas.Nombre;
            viewUsuario.Rut = usuario.InfPersonas.Rut;
            viewUsuario.Usuario = usuario.Usuario;
            viewUsuario.Password = usuario.Password;
            return viewUsuario;
        }

        public void Guardar(ViewModelUsuario persona)
        {
            var usuario = crearNuevoTrabajador(persona, (int)HttpContext.Current.Session["RutEmpGuardad"]);
            usuario.Id_Tipo_Usuario = SrvUsuario.RolUsuario.Empresa;
            
            srvUsuario.Crear(usuario);
            HttpContext.Current.Session.Remove("RutEmpGuardad");
        }

        public void GuardarTrabajador(ViewModelUsuario persona)
        {
            var usuario = crearNuevoTrabajador(persona, (int)HttpContext.Current.Session["Emp_Rut"]);
            usuario.Id_Tipo_Usuario = SrvUsuario.RolUsuario.Trabajador;
            srvUsuario.Crear(usuario);
        }

        private static Modelo.InfUsuario crearNuevoTrabajador(ViewModelUsuario persona, int rutEmpresa)
        {
            var usuario = new Modelo.InfUsuario();
            usuario.Emp_Rut = rutEmpresa;
            usuario.Estado = 1; //Estado vigente

            usuario.InfPersonas = new InfPersonas();
            usuario.InfPersonas.ApellidoMaterno = persona.ApellidoMaterno;
            usuario.InfPersonas.ApellidoPaterno = persona.ApellidoPaterno;
            usuario.InfPersonas.Complementario = persona.Complementario;
            usuario.InfPersonas.CreadoPor = HttpContext.Current.User.Identity.Name;
            usuario.InfPersonas.DireccionParticular = persona.DireccionParticular;
            usuario.InfPersonas.Dv = persona.Dv;
            usuario.InfPersonas.FechaNacimiento = persona.FechaNacimiento;
            usuario.InfPersonas.FechaRegistro = DateTime.Now;
            usuario.InfPersonas.FonoCelular = persona.FonoCelular;
            usuario.InfPersonas.FonoDireccion = persona.FonoDireccion;
            usuario.InfPersonas.FonoEmpresa = persona.FonoEmpresa;
            usuario.InfPersonas.FonoParticular = persona.FonoParticular;
            usuario.InfPersonas.IdComuna = persona.IdComuna;
            usuario.InfPersonas.Mail = persona.Mail;
            usuario.InfPersonas.Nombre = persona.Nombre;
            usuario.InfPersonas.Rut = persona.Rut;
            usuario.InfPersonas.VigUsu = 1; //Estado vigente
            usuario.InfPersonas.Emp_rut = rutEmpresa;
            usuario.Password = persona.Password;
            usuario.Usuario = persona.Usuario;
            return usuario;
        }

        public void Actualizar(ViewModelUsuario persona)
        {
            var usuario = srvUsuario.ObtenerUsuario(persona.Usuario);

            usuario.Estado = persona.Estado;
            usuario.InfPersonas.ApellidoMaterno = persona.ApellidoMaterno;
            usuario.InfPersonas.ApellidoPaterno = persona.ApellidoPaterno;
            usuario.InfPersonas.Complementario = persona.Complementario;
            usuario.InfPersonas.ModificadoPor = HttpContext.Current.User.Identity.Name;
            usuario.InfPersonas.DireccionParticular = persona.DireccionParticular;
            usuario.InfPersonas.FechaModificado = DateTime.Now;
            usuario.InfPersonas.FechaNacimiento = persona.FechaNacimiento;
            usuario.InfPersonas.FonoCelular = persona.FonoCelular;
            usuario.InfPersonas.FonoDireccion = persona.FonoDireccion;
            usuario.InfPersonas.FonoEmpresa = persona.FonoEmpresa;
            usuario.InfPersonas.FonoParticular = persona.FonoParticular;
            usuario.InfPersonas.IdComuna = persona.IdComuna;
            usuario.InfPersonas.Mail = persona.Mail;
            usuario.InfPersonas.Nombre = persona.Nombre;
            usuario.Password = persona.Password;
            
            srvUsuario.Actualizar(usuario);
            
        }
    }
}